/**
 * 给定长度为N的数组P，要求从中选出若干个，假设选出的是k个，则得分为
 *          SIGMA{0.9^(k-i)*Qi, i=1,2,...,k}        1200
 *  得分 = ------------------------------------  - --------
 *            SIGMA{0.9^(k-i), i=1,2,...,k}        sqrt(k)
 * 求最大的得分
 * 很明显是序列问题，用DP；N在5000，可以二维
 * 设Dij为i以内选j个的最大值，Uij为以i结尾选j个的最大值
 * 则 Dij = max(D[i-1][j], Uij)
 * 而Uij 则可根据 D[i-1][j-1]和Pi 计算得到
 * O(N^2)
 */             
#include <bits/stdc++.h>
using namespace std;

using llt = long long;
using pii = pair<int, int>;
using vi = vector<int>;
using vvi = vector<vi>;
using Real = long double;

int N;
vi P;
vector<Real> F, S;
vvi Flag;

/// Dij 表示到i为止选j个的最大值
/// Uij 表示以i结尾选j个的最大值
vector<vector<Real>> D, U;

Real proc(){
    D.assign(N + 1, vector<Real>(N + 1, -1E300));
    U.assign(N + 1, vector<Real>(N + 1, 0));

    for(int i=1;i<=N;++i){
        U[i][1] = P[i] - 1200;
        D[i][1] = max(D[i - 1][1], U[i][1]);
    }

    for(int i=2;i<=N;++i){
        for(int j=2;j<=i;++j){
            auto tmp = D[i - 1][j - 1];
            tmp += 1200 / sqrt(j - 1);
            tmp *= S[j - 2];
            tmp *= 0.9;
            tmp += P[i];
            tmp /= S[j - 1];
            tmp -= 1200 / sqrt(j);
            D[i][j] = max(D[i - 1][j], U[i][j] = tmp);
        }
    }
    return *max_element(D[N].begin(), D[N].end());
}


int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    F.assign(5001, 0); 
    S.assign(5001, 0);
    F[0] = 1; S[0] = 1;
    for(int i=1;i<=5000;++i) S[i] = S[i - 1] + (F[i] = 0.9 * F[i - 1]);

    cin >> N;
    P.assign(N + 1, 0);
    for(int i=1;i<=N;++i) cin >> P[i];
    cout << fixed << setprecision(9) << proc() << endl;
    return 0;
}